#ifndef CAMERA_INTERFACE_H
#define CAMERA_INTERFACE_H

#include <QGenericPlugin>
#include <string>
#include <vector>
#include <stdint.h>

using namespace std;

typedef enum _LASER_MODE_
{
    _LASER_FULL_POWER,           //全功率模式
    _LASER_REDUCED_POWER,        //半功率模式
    _LASER_FULL_PULSE_MODE,      //全功率闪烁模式
    _LASER_HALF_PULSE_MODE,      //半功率闪烁模式
    _LASER_OFF,                  //激光关闭
    _LASER_DIGTAL_POWER          //直接通过数字修改激光器功率
}_LASER_MODE;

class camera_interface
{

public:
    //纯虚函数
    virtual ~camera_interface() = 0 ;
    //通信初始化 ip和端口号
    virtual bool init( string ip = "" , uint16_t port = 0 ) = 0;
    //反初始化，若检测断开连接之后可以调用此函数，并再次调用初始化
    virtual bool dinit( void ) = 0;
    //获取通信参数
    virtual bool get_com_para( string &ip , uint16_t &port ) = 0;
    //设置相机曝光
    virtual bool set_exposure( uint32_t exposure ) = 0;
    //设置激光器模式
    //如果是LASER_DIGTAL_POWER模式，可以通过laser_power直接设置激光器功率
    virtual bool set_laser_mode( _LASER_MODE laser_mode, uint32_t laser_power = 0 ) = 0;
    //设置传感器x轴分辨率
    //x_s轮廓x提取起点，x_end轮廓x提取终点
    virtual bool set_camera_x_resolution( uint32_t x_start , uint32_t x_end ) = 0;
    //设置传感器z方向视野起点和终点
    virtual bool set_camera_z_resolution( uint32_t z_start , uint32_t z_end ) = 0;
    //获取传感器x轴分辨率
    virtual bool get_camera_x_resolution( uint32_t &x_start , uint32_t &x_end ) = 0;
    //获取传感器z方向视野起点和终点
    virtual bool get_camera_z_resolution( uint32_t &z_start , uint32_t &z_end ) = 0;
    //设置传感器增益参数
    //scanControl未实现
    virtual bool set_camera_gain( uint32_t gain ) = 0;
    //获取激光器轮廓
    virtual bool get_profiler( vector<double> &x,vector<double> &z ) = 0;
    //获取错误原因
    virtual string get_error( void ) = 0;
    //清除错误
    virtual bool clear_error( void ) = 0;
protected:
    string ip;                      //ip地址
    uint16_t port;                  //端口号
    uint32_t x_start;               //x轴起点
    uint32_t x_end;                 //x轴终点
    uint32_t z_start;               //轴起点
    uint32_t z_end;                 //z轴终点
    uint32_t exposure_time = 100;   //曝光时间
    string error_str = "";
};

#define camera_interface_iid "cameraMicroEpsilonplugin.Plugin.camera_interface"
QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(camera_interface,camera_interface_iid)
QT_END_NAMESPACE


#endif // CAMERA_INTERFACE_H
